package xyz.tanxiao.links.service;

import com.baomidou.mybatisplus.extension.service.IService;
import xyz.tanxiao.links.common.entity.BatchToShortRequest;
import xyz.tanxiao.links.common.entity.ToShortLinkRequest;
import xyz.tanxiao.links.common.listener.BatchTaskEvent;
import xyz.tanxiao.links.entity.SlLinkMapping;

import java.util.List;
import java.util.Set;

/**
 * 链接映射Service
 *
 * @author 万成波
 * @email 2300064869@qq.com
 * @createTime 2023-06-10 00:56:57 星期六
 */
public interface SlLinkMappingService extends IService<SlLinkMapping> {

	/**
	 * 长链接转短链接
	 *
	 * @param request 请求参数
	 * @return 短链接
	 */
	String toShortLink(ToShortLinkRequest request);


	/**
	 * 批量长链接转短链接
	 *
	 * @param request 请求参数
	 * @return 短链接
	 */
	String batchToShortLink(BatchToShortRequest request);


	/**
	 * 定时查询短链批量生成结果
	 *
	 * @param taskId 任务标识
	 * @return 处理结果 (文件下载地址)
	 */
	BatchTaskEvent scheduledQueryResult(String taskId);


	/**
	 * 生成一个不重复的映射Key
	 *
	 * @param longLink 长链接
	 * @return 映射Key
	 */
	String getNoRepeatMappingKey(String longLink);


	/**
	 * 生成指定数量不重复的映射Key
	 *
	 * @param longLink 长链接
	 * @param batchSize 短链接生成数量
	 * @return 短链接集合
	 */
	Set<String> getNoRepeatMappingKeys(String longLink, int batchSize);


	/**
	 * 通过新映射Key查询重复的映射Key
	 *
	 * @param newMappingKeys 新映射Key
	 * @return 重复的映射Key
	 */
	List<String> getRepeatMappingKeys(Set<String> newMappingKeys);


	/**
	 * 检查转换的主机域名
	 *
	 * @param sourceUrl 原始URL
	 */
	void checkSourceDomain(String sourceUrl);

}
